iT邦幫忙

2023 iThome 鐵人賽

DAY 7
0
DevOps

為你自己架 Server系列 第 7 篇

D7 各種網路工具

  • 分享至 

  • xImage
  •  

在架服務的過程中,我們不可避免的一定會遇到一些問題。很多問題可能只需要看看 log 就可以解決,但也有些問題看了 log 之後還是毫無頭緒。
在這種情況下,有一些工具也許派得上用場,這篇文章會介紹一些自己常用的網路相關小工具,在 debug 的時候會更方便。

ping、nc、tracert

自己平常的第一步都是先使用 ping (或是 nc 跟 tracert,用來看網路本身是不是好的),沒成功再去看 log,最後再去用其他工具看。
有很多時候問題根本就不是服務死掉了,而是中間的路根本就不通,所以封包到不了。
這幾個工具很簡單,通常也不太會找到什麼問題,畢竟網路就是 infra 在那邊,你沒有去動他他也算是穩定。但如果真的遇到這種狀況,等你看 log 看半天,結果最後發現根本是封包到不了,那真的很嘔。

lsof

這個指令本身的功能是看檔案被哪個 process 占用。但我們知道,在 Linux 的世界裡萬物都是檔案,所以我們也可以用它來看網路的使用情況。
我最常使用的 case 是拿來看 port 被誰佔用了,例如說今天我想要用 nginx listen 8080 port,但發現他已經被佔用了。這時候你可以使用 lsof 來看是誰佔用了 8080 port:

$ sudo lsof -i :8080

當然他還有一些其他的用法,但我自己不常用,例如:

  • sudo lsof -i
    • 可以看全部的網路流量
  • sudo lsof -i tcp -s TCP:LISTEN
    • 可以看現在在 listen 的 process 和他在 listen 的 port。
  • sudo lsof -i tcp -s TCP:ESTABLISHED
    • 可以看現在連線已經建立的 process 和 port,例如 VPN

tcpdump

我覺得這是最好用的工具之一,他可以直接攔截封包,讓你看到每個封包的內容,可以直接理解成 CLI 版的 wireshark。
但也因為他可以看到每個封包的內容,使用上應該要注意隱私的問題,而且一個一個封包看其實有點累,不到最後我基本上不會用。
建議使用的時候要想清楚自己要攔截什麼,然後把運算式下清楚一點,不然會截到一堆莫名其妙的東西,妨礙自己判斷。

以下是幾個我自己常用的寫法以及參數:

  • tcpdump -i [interface]
    • 監聽指定的 interface 所有的流量
  • sudo tcpdump -i [interface] icmp
    • 監聽指定的 interface 的 ICMP 流量
  • tcpdump tcp port 80
    • 監聽 HTTP 的流量
  • tcpdump tcp port 22 and src net 10.1.1.0/24
    • 監聽從 10.1.1.0/24 網段來的 ssh 流量

上述幾個指令可以讓管理者看到流量到底有沒有進出,但如果現在問題是出在封包內容的話,可以考慮多加一些參數:

  • -v / -vvv
    • 不會有封包內容,但會有更多的封包資訊,建議就順手開起來
  • -X
    • 顯示出 hex & ASCII 的封包內容,非常好用
  • -A
    • 顯示出封包的 ASCII 內容
    • 平常不太會用到,但如果是看網頁流量很好用
  • -w
    • 可以把擷取的封包內容存在檔案裏面,之後再分析
    • 例如封包真的很多,用 CLI 看起來很痛苦,我會把它存起來然後用 wireshark 開起來慢慢看

結語

使用這些小工具可以節省大量的時間,幫助我們更快速地找到並解決問題,確保服務的穩定運作。希望本文介紹的工具能對你的網路 debug 有所幫助。

Ref.


上一篇
D6 Ansible
下一篇
D8 憑證 - Certbot & Let's Encrypt
系列文
為你自己架 Server 共 8 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言